#ifndef DeclManager_h__
#define DeclManager_h__

#include "Decl.h"

typedef inf::List<Decl*> DeclSeq;

class DeclManager {
public:
    virtual ~DeclManager() {}

    virtual bool            Init() = 0;
    virtual void            Shutdown() = 0;

    virtual bool            ParsePath( const char* path ) = 0;
    virtual void            ClearDecls() = 0;


    virtual int             TypeNum() const  = 0;
    virtual const char*     GetTypeName( int iType ) const = 0;
    virtual const DeclSeq&  GetDeclSeq( int iType ) const = 0;

    virtual int             DeclTotalNum() const = 0;
    virtual const Decl*     FindDeclFrom( const char* name, const char* typeName = NULL ) const = 0;
    virtual int             DeclNum( int iType ) const = 0;
    virtual const Decl*     GetDeclFromTypeIndex( int iDecl, int iType ) const = 0;
};

extern DeclManager* declManager;

#endif // DeclManager_h__